<?PHP
/**
 * MYSQL数据库驱动
 * 
 * @author 大春 lianwanchun@163.com
 * @version 0.1 2010 3 17
 * @copyright Copyright &copy; 2010 lian wan chun
 */
class mysql{
	public  $mysqlLink_set;  		//数据库连接标识
	public  $mysqlLink_get;  		//数据库连接标识
	public 	$Pconnect 	= false;	//连接方式 true为长连接 false为短连接
	public  $lastInsID;				//当前操作记录ID

	public function __construct($getdb,$setdb){
		if($this->mysqlLink_get===NULL){
			$this->mysqlLink_get = $this->connect($getdb);
			if(empty($setdb)){
				$this->mysqlLink_set = $this->mysqlLink_get;
			}else{
				$this->mysqlLink_set =$this->connect($setdb);
			}
		}
	}
	/**
	 * 数据连接
	 *
	 * @param array $db_config	数据配置信息
	 * @return unknown
	 */
	private function connect($dbConfig){
		$connect_way 	= $this->Pconnect ? 'mysql_pconnect' : 'mysql_connect'; //连接方式
		$mysqlLink 		= $connect_way( $dbConfig['host'], $dbConfig['login'], $dbConfig['password']); 	//连接数据库函数
		if (!mysql_select_db($dbConfig['database'], $mysqlLink)){
			if(LianPhp::conf()->debug) echo "数据库连接失败";
			return false;
		}
		//编码设置
		$db_version = mysql_get_server_info($mysqlLink);
		if ($db_version >=  "4.1"){
			mysql_query("SET NAMES '".$dbConfig['charset']."'", $mysqlLink);	//使用UTF8存取数据库 需要mysql 4.1.0以上支持
		}
		return $mysqlLink;
	}

	/**
	 * 执行查询 主要针对 SELECT, SHOW 等指令
	 *
	 * @param string $str (sql指令)
	 * @return array 返回结果集
	 */
	public function query($sql = '',$mysqlLink) {
		if (empty($sql)){
			if(LianPhp::conf()->debug) echo "参数错误";
			return false;
		}
		if(empty($mysqlLink)){
			$mysqlLink = $this->mysqlLink_set;
		}
		$result = mysql_query($sql, $mysqlLink);
		if (false === $result){
			if(LianPhp::conf()->debug) echo "语句执行失败({$sql})";
			return false;
		}
		return $result;
	}

	/**
	 * 执行语句 针对 INSERT, UPDATE 以及DELETE
	 *
	 * @param string $str (sql指令)
	 * @return bool
	 */
	public function execute($sql = '') {
		if (empty($sql)) {
			if(LianPhp::conf()->debug)echo "参数错误";
			return false;
		}
		$result = $this->query($sql);
		if (false  === $result) {
			return false;
		}
		$this->lastInsID 	= mysql_insert_id(); 		//操作记录ID
		return mysql_affected_rows();
	}

	/**
	 * 获得一条查询结果
	 *
	 * @param string $sql	(SQL指令)
	 * @param int $seek		(记录指针)
	 * @return array 返回结果集
	 */
	public function getRow($sql = '', $seek = 0) {
		if (empty($sql)) {
			if(LianPhp::conf()->debug) echo "参数错误";
			return false;
		}
		$result = $this->query($sql,$this->mysqlLink_get);
		if ( false  === $result) {
			return false;
		}
		if(mysql_num_rows($result)>0 && mysql_data_seek($result,$seek)){				//移动结果集指针
			$row = mysql_fetch_assoc($result);		// 返回数组集
			@mysql_free_result($result);
			if (is_array($row)&&count($row)>0) return $row;
		}
		return array();	//返回空数组
	}

	/**
	 * 获得所有的查询数据
	 *
	 * @param string $sql (SQL指令)
	 * @return array 返回所有结果集
	 */
	public function getAll($sql = '') {
		if (empty($sql)) {
			if(LianPhp::conf()->debug) echo "参数错误";
			return false;
		}
		$result = $this->query($sql,$this->mysqlLink_get);
		if ( false  === $result) {
			return false;
		}
		$row_all = array();
		while($row = mysql_fetch_assoc($result)) $row_all[]	 = 	$row;
		//if (count($results)>0) mysql_data_seek($result,0);
		@mysql_free_result($result);
		return $row_all;
	}

	/**
	 * 按字段分类取查询内容 主要用于字段数组排序分类等用图
	 * 
	 * @example 
	 * $array1 = getAllArray("SELECT id,type,content FROM test", "type");
	 *
	 * @param string $sql (SQL指令)
	 * @return array 返回所有结果集
	 */
	public function getAllArray($sql = '', $field='',$isArr=true) {
		if (empty($sql) || empty($field)) {
			if(LianPhp::conf()->debug) echo "参数错误";
			return false;
		}
		$result = $this->query($sql,$this->mysqlLink_get);
		if ( false  === $result) {
			return false;
		}
		$row_all = array();
		while($row = mysql_fetch_assoc($result)){
			if($isArr){
				$row_all[$row[$field]][] = $row;
			}else{
				$row_all[$row[$field]] = $row;
				break;
			}
		}
		//if (count($results)>0) mysql_data_seek($result,0);
		@mysql_free_result($result);
		return $row_all;
	}

	/**
     * 开始一个事务处理
     *
     * @return boolean 处理成功 true | 处理失败 false
     */
	public function begin($autocommit = true){
		$result = $this->query("BEGIN");
		if (false === $result){
			return false;
		}
		$set_autocommit = ($autocommit)?1:0;
		$result_set_autocommit = $this->query("SET AUTOCOMMIT={$set_autocommit}");
		return $result_set_autocommit;
	}

	/**
     * 回滚一个事务
     *
     *
     * @return boolean 处理成功 true | 处理失败 false
     */
	public function rollback(){
		$result = $this->query("ROLLBACK");
		return $result;
	}

	/**
     * 提交一个事务
     *
     *
     * @return boolean 处理成功 true | 处理失败 false
     */
	public function commit(){
		$result = $this->query("COMMIT");
		return $result;
	}

	/**
	 * 表锁定
	 *
	 * @param string $table	锁定表名称
	 * @return unknown
	 */
	public function tableLock($table){
		$result = $this->query("LOCK TABLES {$table} WRITE");
		return $result;
	}

	/**
	 * 解锁
	 *
	 * @return unknown
	 */
	public function tableUnlock(){
		$result = $this->query("UNLOCK TABLES");
		return $result;
	}

	/**
	 * 关闭数据库
	 *
	 * @return bool
	 */
	public function close() {
		if (!@mysql_close($this->mysqlLink_get) || !@mysql_close($this->mysqlLink_set)){
			if(LianPhp::conf()->debug) echo "数据库无法关闭";
			return false;
		}
		return true;
	}
}
?>